package com.galaxy.device.service;

import com.galaxy.device.domain.DeviceEs;
import com.galaxy.device.domain.vo.DeviceLocationVo;
import org.dromara.easyes.core.biz.EsPageInfo;

import java.io.IOException;
import java.util.List;

/**
 * 设备ES服务接口
 */
public interface IDeviceEsService {

    /**
     * 保存设备信息到ES
     *
     * @param deviceEs 设备信息
     * @return 是否成功
     */
    boolean saveDevice(DeviceEs deviceEs);

    /**
     * 批量保存设备信息到ES
     *
     * @param deviceEsList 设备信息列表
     * @return 是否成功
     */
    boolean saveBatchDevice(List<DeviceEs> deviceEsList);

    /**
     * 更新设备信息
     *
     * @param deviceEs 设备信息
     * @return 是否成功
     */
    boolean updateDevice(DeviceEs deviceEs);

    /**
     * 删除设备信息
     *
     * @param deviceId 设备ID
     * @return 是否成功
     */
    boolean deleteDevice(String deviceId);

    /**
     * 查询5公里范围内的设备
     *
     * @param longitude 经度
     * @param latitude  纬度
     * @param distance  距离（单位：公里）
     * @return 设备列表
     */
    List<DeviceEs> listNearbyDevices(Double longitude, Double latitude, Double distance) throws IOException;

    /**
     * 分页查询5公里范围内的设备
     *
     * @param longitude 经度
     * @param latitude  纬度
     * @param distance  距离（单位：公里）
     * @param pageNum   页码
     * @param pageSize  每页大小
     * @return 分页结果
     */
    EsPageInfo<DeviceEs> pageNearbyDevices(Double longitude, Double latitude, Double distance, Integer pageNum, Integer pageSize) throws IOException;

    boolean saveOrUpdateDeviceLocation(DeviceLocationVo deviceLocationVo);

    /**
     * 查询圆形范围内的设备
     * @param longitude 中心点经度
     * @param latitude 中心点纬度
     * @param radius 半径（单位：公里）
     * @return 设备列表
     */
    List<DeviceEs> listDevicesInCircle(Double longitude, Double latitude, Double radius) throws IOException;

    /**
     * 分页查询圆形范围内的设备
     * @param longitude 中心点经度
     * @param latitude 中心点纬度
     * @param radius 半径（单位：公里）
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 分页设备列表
     */
    EsPageInfo<DeviceEs> pageDevicesInCircle(Double longitude, Double latitude, Double radius, Integer pageNum, Integer pageSize) throws IOException;
}
